const jwt = require('jsonwebtoken');

const secrectKey = 'secretKey'; // 密钥
const cookieKey = 'token';

// 用户登录后，生成 token，并添加到 cookie 和 header 中
exports.create = function(res,data = {}, maxAge=3600 * 24){
    // 生成 token
    const token = jwt.sign(data, secrectKey, {
        expiresIn: maxAge
    })
    // 添加到 cookie
    res.cookie(cookieKey, token, {
        maxAge: maxAge * 1000, // 这里的是毫秒
        path: "/"
    })
    // 添加到 header
    res.header("authorization", token)

    return token;
}

// 当用户访问需要验证的接口时，验证 token 是否有效
exports.verify = function(req){
    // 1. 获取 token，优先从 cookie 中获取
    // req.cookies 是 body-parser 中间件解析后的结果, node 是没有的
    let token = req.cookies[cookieKey] || req.header.authorization;
    
    if (!token) return null;

    // 2. 格式化token，去掉 Bearer（假设我们可能有）
    token = token.replace('Bearer ', '');

    // 3. 验证 token
    try {
        const result = jwt.verify(token, secrectKey);
        return result;
    } catch(err) {
        return null;
    }
}

// 当用户退出登录时，清除 token
exports.clear = function(res){
    res.clearCookie(cookieKey);
}

exports.decode = function(token){
    return jwt.decode(token, secrectKey); // 解码 token
}